fetcher/curl: Fix leaks caught by ASAN
authorColin Walters <walters@verbum.org>
Sat, 4 Mar 2017 15:11:15 +0000 (10:11 -0500)
committerAtomic Bot <atomic-devel@projectatomic.io>
Mon, 6 Mar 2017 17:30:19 +0000 (17:30 +0000)
I had to rebuild `glib` with `-fsanitize=address` in order to get a stack trace
to finally get this one.  However, *installing* that glib "system wide"
in my container breaks everything (including `rpm-ostree`, `dnf`, `pkg-config` etc.)
that wasn't built with ASAN.

So my test scenario right now is to extract the libs and do e.g.:
```
make && env LD_LIBRARY_PATH=$HOME/src/distgit/fedora/glib2/asan-libs make check TESTS=tests/test-basic.sh
```

Closes: #719
Approved by: jlebon

src/libostree/ostree-fetcher-curl.c

index 36bd917bb408c3369a8ab97d80550dd31ce6561a..be0e4b416a4b1d28bd832fa5fc3fc95e53ca5a1f 100644 (file)
@@ -416,11 +416,13 @@ timer_cb (gpointer data)
 {
   OstreeFetcher *fetcher = data;
   CURLMcode rc;
+  GSource *orig_src = fetcher->timer_event;
 
-  fetcher->timer_event = NULL;
   rc = curl_multi_socket_action (fetcher->multi, CURL_SOCKET_TIMEOUT, 0, &fetcher->curl_running);
   g_assert (rc == CURLM_OK);
   check_multi_info (fetcher);
+  if (fetcher->timer_event == orig_src)
+    fetcher->timer_event = NULL;
 
   return FALSE;
 }
@@ -713,6 +715,8 @@ initiate_next_curl_request (FetcherRequest *req,
   CURLMcode rc;
   OstreeFetcher *self = req->fetcher;
 
+  if (req->easy)
+    curl_easy_cleanup (req->easy);
   req->easy = curl_easy_init ();
   g_assert (req->easy);